//package com.young.financial.service.impl;
//
//import com.young.financial.config.UrlConstants;
//import com.young.financial.constant.ReturnCodeEnum;
//import com.young.financial.dao.AccountDao;
//import com.young.financial.domain.AccountDO;
//import com.young.financial.domain.BalanceDO;
//import com.young.financial.service.OperBalanceService;
//import com.young.financial.utils.*;
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.stereotype.Service;
//import org.springframework.web.client.RestTemplate;
//
//import java.math.BigDecimal;
//import java.util.HashMap;
//import java.util.List;
//import java.util.Map;
//
///**
// * @auter miaozhenfei
// * @date 2019/7/30 17:59
// */
//@Service
//public class OperBalanceServiceImpl implements OperBalanceService {
//
//    public static final Logger LOGGER = LoggerFactory.getLogger(OperBalanceServiceImpl.class);
//
//    @Autowired
//    private RedisUtils redisUtils;
//    @Autowired
//    private AccessTokenUtil accessTokenUtil;
//    @Autowired
//    private HttpClientUtils httpClientUtils;
//
//    @Autowired
//    private AccountDao accountDao;
//
//    @Autowired
//    private RestTemplate restTemplate;
//
//    public AccountDO getByCustomerUuid(String uuid) {
//        Map<String, Object> map = new HashMap();
//        map.put("customerUuid", uuid);
//        map.put("delflag", "1");
//        List<AccountDO> list = accountDao.list(map);
//        return list != null && list.size() > 0 ? list.get(0) : null;
//    }
//
//
//    public Double queryBalance(String customerUuid) {
//        Double accountBalance = null;
//
//        AccountDO account = this.getByCustomerUuid(customerUuid);
//        if (null != account) {
//            accountBalance = account.getAccountBalance();
//        }
//        return accountBalance;
//    }
//
//    /**
//     * 余额校验
//     *
//     * @param customerUuid
//     * @param newBalance
//     * @return
//     */
//    @Override
//    public int compareBalance(String customerUuid, Double newBalance) {
//
//        int flag = -1;
//        Double oldBalance = this.queryBalance(customerUuid);
//
//        if (null == oldBalance || null == newBalance) {
//
//            return flag;
//        }
//        int retval = oldBalance.compareTo(newBalance);
//
//        return retval;
//    }
//
//    /**
//     * 冻结订单余额
//     *
//     * @param
//     * @param
//     * @param
//     * @return
//     */
//    @Override
//    public boolean frozenOrderBalance(Map map) {
//        //父分类uuid
//        Object temp = map.get("customerUuid");
//        String customerUuid = temp != null ? temp.toString() : null;
//        //分类名称
//        temp = map.get("frozenBalance");
//        Double frozenBalance = temp != null ? new BigDecimal(temp.toString()).doubleValue() : null;
//        // 位置
//        temp = map.get("billNo");
//        String billNo = temp != null ? temp.toString() : null;
//
//        Map returnMap = new HashMap();
//        String result = null;
//        if (null == customerUuid || null == frozenBalance || null == billNo) {
//            returnMap.put("return_code", ReturnCodeEnum.PARAMNULL.getKey());
//            returnMap.put("message", ReturnCodeEnum.PARAMNULL.getValue());
////            return JsonUtils.objectToJson(returnMap);
//            LOGGER.error("冻结订单余额customerUuid："+customerUuid +JsonUtils.objectToJson(returnMap) );
//
//            return false;
//        }
//        int flag = this.compareBalance(customerUuid, frozenBalance);
//        if (flag < 0) {
//            returnMap.put("return_code", ReturnCodeEnum.ACCOUNTLACK.getKey());
//            returnMap.put("message", ReturnCodeEnum.ACCOUNTLACK.getValue());
////            return JsonUtils.objectToJson(returnMap);
//            LOGGER.error("冻结订单余额customerUuid："+customerUuid +JsonUtils.objectToJson(returnMap) );
//
//            return false;
//        }
//        String accessToken = null;
//        Object object = redisUtils.getValue("accessToken");
//        if (null == object) {
//            accessToken = accessTokenUtil.getaccessToken();
//        } else {
//            accessToken = (String) object;
//        }
//
//
//        BalanceDO balanceDO = new BalanceDO();
//        balanceDO.setAccessToken(accessToken);
//        balanceDO.setBillNo(billNo);
//        balanceDO.setCustomerUuid(customerUuid);
//        balanceDO.setFrozenBalance(frozenBalance);
//
//        try {
//            result= httpClientUtils.doPost(UrlConstants.FROZEN_ORDER_BALANCE_URL, MapUtils.objectToMap(balanceDO));    //doPostJson(UrlConstants.FROZEN_ORDER_BALANCE,balanceDOStr);
//            LOGGER.info(String.format("customerUuid:%s,会员注册返回结果:%s",customerUuid,result ));
//
//            return true;
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//        return false;
//    }
//
//    /**
//     * 根据状态值确定核减还是解冻冻结金额
//     *
//     * @param
//     * @param
//     * @param
//     * @param
//     * @return
//     */
//    @Override
//    public boolean subFrozenOrUnfreezeBalance(Map map) {
//
//
//        Object temp = map.get("customerUuid");
//        String customerUuid = temp != null ? temp.toString() : null;
//
//        temp = map.get("frozenBalance");
//        Double frozenBalance = temp != null ? new BigDecimal(temp.toString()).doubleValue() : null;
//
//        temp = map.get("billNo");
//        String billNo = temp != null ? temp.toString() : null;
//        temp = map.get("flag");
//        Integer flag = temp != null ? (Integer) temp : null;
//
//
//        Map returnMap = new HashMap();
//        String result = null;
//        if (null == customerUuid || null == frozenBalance || null == billNo || null == flag) {
//            returnMap.put("return_code", ReturnCodeEnum.PARAMNULL.getKey());
//            returnMap.put("message", ReturnCodeEnum.PARAMNULL.getValue());
//            //return JsonUtils.objectToJson(returnMap);
//            LOGGER.info(String.format("customerUuid:%s,根据状态值确定核减还是解冻冻结金额:%s",customerUuid,returnMap ));
//
//            return false;
//        }
//        String accessToken = null;
//        Object object = redisUtils.getValue("accessToken");
//        if (null == object) {
//            accessToken = accessTokenUtil.getaccessToken();
//        } else {
//            accessToken = (String) object;
//        }
//
//        //核减冻结订单金额
//        if (flag == 1) {
//
//            BalanceDO balanceDO = new BalanceDO();
//            balanceDO.setAccessToken(accessToken);
//            balanceDO.setBillNo(billNo);
//            balanceDO.setCustomerUuid(customerUuid);
//            balanceDO.setFrozenBalance(frozenBalance);
//            try {
//                result = httpClientUtils.doPost(UrlConstants.SUB_FROZEN_BALANCE_URL, MapUtils.objectToMap(balanceDO));
//                LOGGER.info(String.format("customerUuid:%s,核减冻结订单金额返回结果:%s",customerUuid,result ));
//                return true;
//            } catch (Exception e) {
//                e.printStackTrace();
//            }
//        }else if (flag == 0) {
//            //解冻冻结金额
//            BalanceDO balanceDO = new BalanceDO();
//            balanceDO.setAccessToken(accessToken);
//            balanceDO.setBillNo(billNo);
//            balanceDO.setCustomerUuid(customerUuid);
//            balanceDO.setFrozenBalance(frozenBalance);
//            try {
//                result = httpClientUtils.doPost(UrlConstants.UNFREEZE_BALANCE_URL, MapUtils.objectToMap(balanceDO));
//                LOGGER.info(String.format("customerUuid:%s,解冻冻结金额返回结果:%s",customerUuid,result ));
//                return true;
//            } catch (Exception e) {
//                e.printStackTrace();
//            }
//        }
//
//        return false;
//    }
//
//
//}
